Many computer systems use the concept of an in-memory table structure to store data. In-memory data structures are typically used because they provide faster access to data than similar tables that are stored in persistent forms of storage such as hard drives. When a system that uses an in-memory table crashes and is rebooted, the system may try to restore the state of the in-memory table just before the crash occurred. Many systems implement such a restoration process by using a redo-log that is stored in persistent storage such as a hard drive.
Standard redo logs are implemented such that whenever an entry is updated in the in-memory table, a corresponding redo log entry is created. When the system crashes and is then rebooted, the in-memory table is repopulated to the state just before the crash by replaying the redo log entries.
The size of a standard redo log is unbounded because the number of entries in the redo log grows in direct proportion to the number of changes to the in-memory table (i.e. an entry is made in the redo log for each change made to an entry in the in-memory table). While the number of redo log entries can be reduced using various garbage collection techniques, these techniques are often complex and error prone.